/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.lostreseditores.vista;

import com.lostreseditores.logica.EstudianteLogicaLocal;
import com.lostreseditores.modelo.Estudiante;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author DILOVE
 */
@ManagedBean (name = "estudiantesVista")
@RequestScoped

public class EstudianteVista {
    @EJB
    private EstudianteLogicaLocal estudianteLogica;
    
    private InputText txtIdentificacion;
    private InputText txtNombre;
    private InputText txtApellido;
    private SelectOneMenu cmbTipo;
    private Estudiante selectedEstudiante;
    private List<Estudiante> listaEstudiantes;
    //Botones
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnLimpiar;
    private CommandButton btnEliminar;

    public InputText getTxtIdentificacion() {
        return txtIdentificacion;
    }

    public void setTxtIdentificacion(InputText txtIdentificacion) {
        this.txtIdentificacion = txtIdentificacion;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public InputText getTxtApellido() {
        return txtApellido;
    }

    public void setTxtApellido(InputText txtApellido) {
        this.txtApellido = txtApellido;
    }

    public SelectOneMenu getCmbTipo() {
        return cmbTipo;
    }

    public void setCmbTipo(SelectOneMenu cmbTipo) {
        this.cmbTipo = cmbTipo;
    }

    public Estudiante getSelectedEstudiante() {
        return selectedEstudiante;
    }

    public void setSelectedEstudiante(Estudiante selectedEstudiante) {
        this.selectedEstudiante = selectedEstudiante;
    }

    public List<Estudiante> getListaEstudiantes() {
        if(listaEstudiantes==null){
            try {
                listaEstudiantes = estudianteLogica.consultar();                
            } catch (Exception ex) {
                Logger.getLogger(EstudianteVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaEstudiantes;
    }

    public void setListaEstudiantes(List<Estudiante> listaEstudiantes) {
        this.listaEstudiantes = listaEstudiantes;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }
    
    public void registrar_action(){
        Estudiante objEstudiante = new Estudiante();
        try{
            Integer id = Integer.parseInt(txtIdentificacion.getValue().toString());
            String nombre = txtNombre.getValue().toString();
            if(nombre==null || nombre.equals("")){
                FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage("El nombre es Obligatorio"));
            }
            objEstudiante.setIdEstudiante(id);
            objEstudiante.setNombresestudiante(nombre);
            objEstudiante.setApellidosestudiante(txtApellido.getValue().toString());
            objEstudiante.setTipoidestudiante(cmbTipo.getValue().toString());
            estudianteLogica.registrar(objEstudiante);
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "El estudiante se registró con Éxito"));
        }catch(NumberFormatException e){
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage("El documento debe ser numerico"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(ex.getMessage()));
            Logger.getLogger(EstudianteVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaEstudiantes = null;
        limpiar_action();
    }
    
    public void registrar_actionC(){
        Estudiante objEstudiante = new Estudiante();
        try{
            Integer id = Integer.parseInt(txtIdentificacion.getValue().toString());
            String nombre = txtNombre.getValue().toString();
            if(nombre==null || nombre.equals("")){
                FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage("El nombre es Obligatorio"));
            }
            objEstudiante.setIdEstudiante(id);
            objEstudiante.setNombresestudiante(nombre);
            objEstudiante.setApellidosestudiante(txtApellido.getValue().toString());
            objEstudiante.setTipoidestudiante(cmbTipo.getValue().toString());
            estudianteLogica.registrar(objEstudiante);
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "El estudiante se registró con Éxito"));
        }catch(NumberFormatException e){
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage("El documento debe ser numerico"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(ex.getMessage()));
            Logger.getLogger(EstudianteVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaEstudiantes = null;
        limpiar_actionC();
    }
    
    public void limpiar_action(){
        txtIdentificacion.setValue("");
        txtNombre.setValue("");
        txtApellido.setValue("");
        cmbTipo.setValue("");
        txtIdentificacion.setDisabled(false);
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
    }
    
    public void limpiar_actionC(){
        txtIdentificacion.setValue("");
        txtNombre.setValue("");
        txtApellido.setValue("");
        cmbTipo.setValue("");
        txtIdentificacion.setDisabled(false);
        btnRegistrar.setDisabled(false);
    }
    
    public void modificar_action(){
        try {
            Estudiante estudiante = new Estudiante();
            Integer documento = Integer.parseInt(txtIdentificacion.getValue().toString());
            estudiante.setIdEstudiante(documento);
            estudiante.setNombresestudiante(txtNombre.getValue().toString());
            estudiante.setApellidosestudiante(txtApellido.getValue().toString());
            estudiante.setTipoidestudiante(cmbTipo.getValue().toString());
            estudianteLogica.modificar(estudiante);
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "El estudiante se modificó con Éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", ex.getMessage()));
            Logger.getLogger(EstudianteVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        limpiar_action();
        listaEstudiantes=null;
    }
    
    public void seleccionarEstudiante(SelectEvent e){
        Estudiante est = (Estudiante) e.getObject();
        txtIdentificacion.setValue(est.getIdEstudiante());
        txtNombre.setValue(est.getNombresestudiante());
        txtApellido.setValue(est.getApellidosestudiante());
        cmbTipo.setValue(est.getTipoidestudiante());
        txtIdentificacion.setDisabled(true);
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
    }
    
    public void eliminar_action(){
        try {
            Estudiante estudiante = new Estudiante();
            Integer documento = Integer.parseInt(txtIdentificacion.getValue().toString());
            estudiante.setIdEstudiante(documento);
            estudiante.setNombresestudiante(txtNombre.getValue().toString());
            estudiante.setApellidosestudiante(txtApellido.getValue().toString());
            estudiante.setTipoidestudiante(cmbTipo.getValue().toString());
            estudianteLogica.eliminar(estudiante);
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "El estudiante se eliminó con Éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", ex.getMessage()));
            Logger.getLogger(EstudianteVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        limpiar_action();
        listaEstudiantes=null;
    }
}
